package com.qvtu.poetry.service;

import com.qvtu.poetry.entry.Result;
import com.qvtu.poetry.entry.User;
import com.qvtu.poetry.entry.dto.UserRegisterDTO;
import com.qvtu.poetry.entry.dto.UserUpdateDTO;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * @author zxz
 * @description 针对表【t_user(用户表)】的数据库操作Service
 * @createDate 2025-10-11 10:42:09
 */
public interface UserService extends IService<User> {

    /**
     * 登录并生成令牌
     *
     * @param password 密码
     * @param email    邮箱
     * @return 携带令牌的统一返回结构
     */
    Result<String> loginAndGenToken(String password, String email);

    /**
     * 注册（含用户名/邮箱校验与邮箱验证码校验）
     *
     * @param userRegisterDTO 注册数据
     * @return 统一返回结构
     */
    Result<String> registerWithVerification(UserRegisterDTO userRegisterDTO);

    /**
     * 获取当前登录用户信息（从线程上下文读取）
     *
     * @return 用户信息
     */
    Result<User> getCurrentUserInfo();

    /**
     * 更新当前登录用户信息（从线程上下文读取用户ID）
     *
     * @param userUpdateDTO 更新数据
     * @return 统一返回结构
     */
    Result<String> updateCurrentUserInfo(UserUpdateDTO userUpdateDTO);

    /**
     * 登录验证（内部方法）
     *
     * @param password
     * @param email
     * @return
     */
    User login(String password, String email);

    /**
     * 注册（内部方法）
     *
     * @param user
     * @return
     */
    boolean register(User user);

    /**
     * 根据用户名查询用户
     *
     * @param username
     * @return
     */
    User findByUsername(String username);

    /**
     * 根据邮箱查询用户
     *
     * @param email
     * @return
     */
    User findByEmail(String email);

    /**
     * 更新用户信息（内部方法）
     *
     * @param userId        用户ID
     * @param userUpdateDTO 更新的用户信息
     * @return 是否更新成功
     */
    boolean updateUserInfo(Long userId, UserUpdateDTO userUpdateDTO);
}
